package com.neu.table;

import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

import com.neu.pojo.Model;
import com.neu.service.ImodelService;
import com.neu.service.impl.ModelService;

public class ModelTable extends AbstractTableModel{//展示模板信息
	private String[] colNames = {"","ID","模板名称","类型"};//表头
	private Object[][] data;//数据
	//service
	private ImodelService modelService = ModelService.getInstance();
	
	//构造
	public ModelTable() {
		ArrayList<Model> models = modelService.list();//得到所有的马
		
		if(models.size()!=0&&models!=null) {
			this.data = new Object[models.size()][colNames.length];//创建数组
			
			for(int i=0;i<models.size();i++) {//加载数据
				data[i][0] = new Boolean(false);//复选框
				data[i][1] = models.get(i).getId();//id
				data[i][2] = models.get(i).getName();//模板名称
				data[i][3] = models.get(i).getKind();//类型
			}
		}else {
			this.data = new Object[0][0];
		}
	}
	
	//返回结果行数
	@Override
	public int getRowCount() {
		return this.data.length;
	}

	//返回结果列数
	@Override
	public int getColumnCount() {
		return this.colNames.length;
	}
	
	//获得对应列名
	@Override
	public String getColumnName(int column) {
		return this.colNames[column];
	}

	//每列对应的类型
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		return data[0][columnIndex].getClass();
	}
	
	//返回哪行哪列对应的数据
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		return data[rowIndex][columnIndex];
	}
	
	/**
	 * 哪列不能编辑
	 * 返回false 不可编辑
	 */
	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		if (columnIndex == 1) {		//编号不能编辑
			return false;
		} else
			return true;
	}
	
	//修改表格中的数据
	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		data[rowIndex][columnIndex] = aValue;
		/*修改表格数据后，显示改后结果*/
		fireTableCellUpdated(rowIndex, columnIndex);
	}

	@Override
	public void fireTableRowsDeleted(int firstRow, int lastRow) {
		super.fireTableRowsDeleted(firstRow, lastRow);
	}
	
	public int delete(){
		int cnt=0;
		for (int i=0;i<getRowCount();i++) {
			if ((boolean)data[i][0]) {
				System.out.println(modelService.delete(new Model((Integer) data[i][1])));
				cnt+=1;
			}
        }
		if(cnt == 0) {
			return 0;
		}
		
		//文件中数据已经更改
        fireTableDataChanged();
	    Object[][] data2=new Object[getRowCount()-cnt][colNames.length];//创建减少了cnt行的数据数组
	    int j=0;
	    for (int i=0;i<getRowCount();i++) {//将未选中的数据保留，选中的丢弃
			if (getValueAt(i,0).equals(false)) {//如果没选中
				data2[j][0]=new Boolean(false);
				data2[j][1]=data[i][1];
				data2[j][2]=data[i][2];
				data2[j][3]=data[i][3];
				j++;
			}	
		}
	    data=new Object[getRowCount()-cnt][colNames.length];//new 新数组
	    data=data2;//覆盖原来的data
	    return cnt;//返回删除的个数
	}
}
